package com.apobates.jforum.grief.aurl.utils.defend;

import java.util.Arrays;
import java.util.List;
/**
 * 校验断言
 * @param <T> 目标类型
 */
@FunctionalInterface
public interface Assertion<T> {
    /**
     * 执行条件校验
     * @param predicateQueue 校验条件队列
     * @return
     */
    List<AssertResult<T>> asserte(PredicateQueue<T> predicateQueue);
    /**
     * 空参数的检查
     * @return
     * @param <T>
     */
    static <T> Assertion<T> empty(){
        return new EmptyAssertion<>();
    }
    /**
     * 检查单个参数
     * @param value 待判断的目标
     * @return
     * @param <T> 判断的目标类型
     */
    static <T> Assertion<T> single(T value){
        return new SingleAssertion<>(()->value);
    }
    /**
     * 检查多个参数
     * @param values 待判断的目标
     * @return
     * @param <T>
     */
    static <T> Assertion<T> multi(T ... values){
        return new MultiAssertion<>(values);
    }
}
